// Header
// 除了从 URL 和请求 body 上获取参数之外，还有许多参数是通过请求 header 传递的。框架提供了一些辅助属性和方法来获取。
//
// ctx.headers，ctx.header，ctx.request.headers，ctx.request.header：这几个方法是等价的，都是获取整个 header 对象。
// ctx.get(name)，ctx.request.get(name)：获取请求 header 中的一个字段的值，如果这个字段不存在，会返回空字符串。
// 我们建议用 ctx.get(name) 而不是 ctx.headers['name']，因为前者会自动处理大小写。

// src/controller/user.ts
// GET /user/1
import { Controller, Get, Headers, Inject } from '@midwayjs/decorator';
import { User } from '../../interface';
import { Context } from '@midwayjs/koa';

@Controller('/api/controller/param/header')
export class UserController {
  /**
   * 示例：从装饰器获取
   * @param cacheSetting
   */
  @Get('/getHeaderParamFromDecorator/:uid')
  async getParamHeaderFromDecorator(
    @Headers('cache-control') cacheSetting: string
  ): Promise<User> {
    // no-cache
    // ...
    console.log('cacheSetting:', cacheSetting);
    return {
      id: 1,
      name: 'testAtQuery',
      age: 1,
    };
  }

  /**
   * 示例：从 API 获取 head param
   */
  @Inject()
  ctx: Context;

  @Get('/getHeadParamFromApi/:uid')
  async getHeadParamFromApi(): Promise<User> {
    const cacheSetting = this.ctx.get('cache-control');
    // no-cache
    console.log('cacheSetting:', cacheSetting);
    return {
      id: 1,
      name: 'testAtQuery',
      age: 1,
    };
  }
}
